#include <stdio.h>
#include <unistd.h>
#ifndef WIN32
#include <curses.h>
#else
#include <ncurses.h>
#endif

#include "boucleJeu-TXT.h"


void ncursAff( WINDOW* win, const Jeu* j)
{
	wclear(win);
	int x,y;

	const Terrain* ter = getConstTerrainJeu(j);
    const Balle* bal = getConstBalleJeu(j);
	const Barre* bar = getConstBarreJeu(j);
	const int vie = getConstVieJeu(j);
    const TableauOp* to=getOptionTerrain(ter);
    int f = getFinTableau(to);
	const Option* opt;

	initscr(); //
	for(x=0;x<getDimxTer(ter)+2;x++)
		for(y=0;y<getDimyTer(ter)+2;y++)
        {
            if( (x == 0 ) || (y == 0) || (x == getDimxTer(ter) + 1) || (y == getDimyTer(ter) + 1) )
            {
                mvwprintw( win, y, x*2, "*");
            }
            else if ( getResistanceBrique( getBriqueTer(ter,x-1,y-1) ) == 0)
            {
                mvwprintw( win, y, x*2, "  ");
            }
            else
            {
                mvwprintw( win, y, x*2, "%d", noBrique(getBriqueTer(ter,x-1,y-1)));
            }
        }
    for(x=0;x<f;x++)
        {
            opt=getIemeOptionTableau(to,x);
            mvwprintw( win,getPositionYOption(opt)+1,getPositionXOption(opt)*2+2,"%d",getNumeroOption(opt));
        }
        if( j->bl->etat == 1 )
			mvwprintw( win, getPositionYBal(bal)+1, getPositionXBal(bal)*2+2, "x");
		else if( j->bl->etat == 2 )
			mvwprintw( win, getPositionYBal(bal)+1, getPositionXBal(bal)*2+2, "o");


	for(x=0;x<(getTailleBar(bar)*2);x++)
	{
	    mvwprintw( win, getHauteurBar(bar)+1, getGaucheBar(bar)*2+x+1, "=");
	}
	//mvwprintw( win, getDimyTer(ter)+1, 0, "CASSE BRIQUE A 2 BALLES");
	mvwprintw( win, getDimyTer(ter)+1, 1, "%d", getFinTableau(to));
	if (getFinTableau(to) != 0)
	{
        mvwprintw( win, getDimyTer(ter)+3, 5, "num %d", getNumeroOption(getIemeOptionTableau(to,0)) );
        mvwprintw( win, getDimyTer(ter)+3, 16, "x %d", getPositionXOption(getIemeOptionTableau(to,0)) );
        mvwprintw( win, getDimyTer(ter)+3, 11, "y %d", getPositionYOption(getIemeOptionTableau(to,0)) );
	}

	//mvwprintw( win, getDimyTer(ter)+1, 4, "%d", getNumeroOption(getIemeOptionTableau(to, 0)));
	mvwprintw( win, getDimyTer(ter)+2, 0, "nombre de vie : %d", vie);

	wmove( win, getDimyTer(ter)-1-getHauteurBar(bar), getGaucheBar(bar));

}


void ncursBoucle(Jeu* j)
{
	WINDOW *win;
	int c;
	bool ok;

	initscr();		// passe l'écran texte en mode NCurses
	clear();		// efface l'écran
	noecho();  	//Lorsqu'une touche est préssée au clavier, elle n'apparait pasa à l'écran
	cbreak();		// un caractère est directement affiché, il ne passe pas dans un buffer

	// Creation d'une nouvelle fenetre en mode texte
	// => fenetre de dimension et position ( WIDTH, HEIGHT, STARTX,STARTY)
	win = newwin( getDimyTer(getConstTerrainJeu(j))+5, getDimxTer(getConstTerrainJeu(j))*2+7, 5, 10);
	keypad(win, TRUE);		// pour que les flèches soient traitées (il faut le faire après création de la fenêtre)

	halfdelay( 10 );
	//notimeout(win,true);
	//wtimeout( win, 500 );
	//nodelay(win,true);


	ok = true;
	lacheBal(j->bl,j->t,0,1);
	do
	{
		ncursAff( win, j);
        //calculerPosition(jeu->bl);

        if(getPositionYBal(j->bl) >= getHauteurBar(j->br))
        {
            setVieJeu(j);
            libereTouteOptionTableau(j->t->opt);
            initialiseTableau(j->t->opt);
            initBal(j->bl, j->br);
            lacheBal(j->bl,j->t,0,1);
        }
        if ( estVideTer(j->t) == 1 )
		{
            ok = false;
            setFinJeu(j,1);
            break;

        }
        else if ( j->vie < 0 )
        {
            ok = false;
            setFinJeu(j,2);
            break;


        }


		calculerNouvelleDirectionJeu(j);
		setPositionBal(j->bl);
		rattrapeOptionJeu(j);
		touteOptionTombeTer(j->t);


		c = wgetch(win);
		//jeuActionClavier( jeu, 'd');


		switch(c)
		{
			case KEY_LEFT:
				actionClavierJeu( j, 'g');
				break;
			case KEY_RIGHT:
				actionClavierJeu( j, 'd');
				break;
			case 27:
				ok = false;
				setFinJeu(j,3);
				break;
            //default:
                //sleep(1);
                //break;
		}
	} while(ok);

	endwin();
}

